package com.sheliduan.itlearning.common.domain.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sheliduan.itlearning.common.domain.dos.CategoryDO;
import com.sheliduan.itlearning.common.domain.dos.TagDO;
import com.sheliduan.itlearning.common.domain.dos.UserDO;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * @author: 断舍离
 * @date: 2025/2/10 10:13
 * @description: 标签映射接口
 **/
public interface TagMapper extends BaseMapper<TagDO> {

    /*
     * 根据查询条件分页查询标签数据
     * */
    default Page<TagDO> selectPageList(long current, long size, String name, LocalDateTime startDate, LocalDateTime endDate){
        // MyBatis分页对象, 需传入当前页码和每页记录数
        Page<TagDO> page = new Page<>(current, size);
        LambdaQueryWrapper<TagDO> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(name), TagDO::getName, name)
                .ge(Objects.nonNull(startDate), TagDO::getCreateTime, startDate) // 大于等于 startDate
                .le(Objects.nonNull(endDate), TagDO::getCreateTime, endDate) // 小于等于 endDate
                .orderByDesc(TagDO::getCreateTime);
        return selectPage(page, wrapper);
    }
    default List<TagDO> selectAllByCategoryId(Integer categoryId) {
        LambdaQueryWrapper<TagDO> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(TagDO::getCategoryId, categoryId);
        return selectList(wrapper);
    }
    /*
     * 查询全部分类, 选择课程分类时调用
     * */
    default List<TagDO> selectAll() {
        return selectList(null);
    }
    /*
     * 根据标签id修改标签信息
     * */
    default int updateTag(Integer id, String name) {
        LambdaUpdateWrapper<TagDO> wrapper = new LambdaUpdateWrapper<>();
        wrapper.set(TagDO::getName, name);
        wrapper.set(TagDO::getUpdateTime, new Date());
        wrapper.eq(TagDO::getId, id);
        return update(null, wrapper);
    }

    /*
     * 根据分类id删除该分类下所有标签
     * */
    default List<TagDO> selectByCategoryId(Integer categoryId) {
        LambdaUpdateWrapper<TagDO> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(TagDO::getCategoryId, categoryId);
        return selectList(wrapper);
    }
}
